#ifndef LIN_H
#define LIN_H

#include <MyProject.h>

#define LIN_MODE_Send       SetBit(LIN_CR, LINRW);     /* 发送操作 */
#define LIN_MODE_Receive    ClrBit(LIN_CR, LINRW);     /* 接收操作 */
#define LIN_ACK             SetBit(LIN_CSR, LINACK);   /* 应答帧头，该位置 1 前必须将校验模式, 读写模式,数据, 数据长度准备好 */
#define CheckEnhanced       ClrBit(LIN_CR, CHKMOD);    /* 增强校验模式 */
#define CheckClass          SetBit(LIN_CR, CHKMOD);    /* CLASS校验模式 */

#define LIN_Sleep                \
    {                            \
        SetBit(LIN_CSR, LINSLP); \
        SetBit(LIN_CSR, LINSLP); \
    } //有外部收发器要   拉低外部收发器的Sleep管脚保持低功耗

/* set the size of data, SIZE: 0~8*/
#define LIN_SETSIZE(SIZE) LIN_SIZE = SIZE;
    
typedef struct
{
  /* 接收到的数据0x2A */
  uint8  EnableReq_ECF;  // 使能信号，无使能，即使有转速请求也不工作
  uint16 SpeedReq_ECF;    // ECF发送目标转速
    
  /* 回复的数据0x2E */
  //Byte[0]
  uint8 ECF_EnableSt;   // 返回实际转速
  uint8 ECF_WorkingSt; //
  uint8 ECF_WorkingMode; //
  //Byte[1]
   uint8 ECF_Speed ;            //反馈转速
  //Byte[2]
   uint8 ECF_Voltage;           //反馈电压
  //Byte[3,4]
   uint16 ECF_Current;           //反馈电流
  //Byte[5,6]
   uint16 ECF_Power;             //反馈功率
   //Byte[7]
   uint8 ECF_FaultSt;             //控制器有无故障标志：  
   uint8 ECF_CommunicationError;  //通信状态标志  
   uint8 ECF_VoltageError;      // 电压故障
   uint8 ECF_UnderVoltageError;      // 欠压故障
   uint8 ECF_OverVoltageError;      // 过压故障
   uint8 ECF_OverTempError;
   uint8 ECF_HardwareError;
   uint8 ECF_StallError;
   uint8 ECF_StallErrorCheck;   // 堵转故障确认
   uint8 ECF_OverCurrentError;
   uint8 ECF_LinLostError;  // 丢帧
     
} LINdata;
void LIN_Init(void);        /* LIN初始化 */
void LIN_list(void);        /* 接收调度表 */
void ReceiveSYS(uint8 PID); /* 接收的数据处理 */
    
/******* 接收反馈数据定义**************/
extern LINdata xdata EOP;
extern xdata uint8 EOP_RStime;
extern void EOP_TXLIN(void);
extern void EOP_RXLIN(void);
#endif